package pl.wroc.pwr.mss.server.service;

import java.io.File;
import java.util.List;

import pl.wroc.pwr.mss.logic.domain.Song;

/**
 * Serwis dla encji Song.
 * 
 * @author mjagus
 */
public interface SongService extends GenericService<Song, Long>
{
    /**
     * Tworzy obiekt typu Song na podstawie danego pliku mp3. Jesli dany
     * plik nie jest plikiem mp3 to zostanie zwrocony <code>null</code>. Jesli
     * jest plikiem mp3, ale nie posiada zadnego tagu ID3, to zostanie zwrocony
     * obiekt typu Song ktorego tytul rownac sie bedzie nazwie tego pliku
     * po odjeciu rozszerzenia ".mp3".
     * Uwaga: Metoda nie ustawia atrybutu "priority" na encji. Osoba wywolujaca
     * te metode sama musi zadbac o ustawienie tego atrybutu.
     * 
     * @param file Dany plik mp3
     * @return Obiekt typu Song.
     */
    Song createSongForFile(File file);

    /**
     * Tworzy liste obiektow typu Song na podstawie danej tablicy plikow.
     * Wynikowa lista moze miec wielkosc od 0 do N, gdzie N jest wielkoscia
     * danej tablicy. Wszystko zalezy od tego czy pliki znajdujace sie w tej
     * tablicy sa poprawnymi plikami mp3.
     * 
     * @param files Dana tablica plikow
     * @return Lista obiektow typu Song. Lista pusta w przypadku gdy nie uda
     * sie odczytac zadnego pliku.
     */
    List<Song> createSongsForFiles(File[] files);

    /**
     * Aktualizuje tagi ID3 zgodnie z danymi znajdujacymi sie w podanej encji
     * Song.
     * 
     * @param song Podana encja Song
     */
    void updateID3Tags(Song song);
}
